/**
 * Created by hejiahui on 2018/6/24.
 */
import axios from 'axios'
import Vue from 'vue'

const config = require('../../../config')
const ErrorMessage  = {
  timeOut: 1500
}
const successCode =  new Set([0, '0'])
const yb_print = console.log
// 创建实例，基本配置
const axiosInstance2 = axios.create({
  baseURL: 'http://pdis.ccnfgame.com/invitationapi/v1',
  timeout: 10000
})

const axiosInstance = axios.create({
  baseURL: `http://${config.ip}`,
  timeout: 10000
})


// 拦截器（请求拦截）
axiosInstance.interceptors.request.use((config) => {
  // const token = window.getCookie('session')
  // config.data = JSON.stringify(config.data)
  yb_print('================= url ==================')
  yb_print(config.method + '  -  ' + config.url)
  yb_print('================= 参数 ==================')
  if (config.method == "get") {
    yb_print(config.params)
  } else {
    yb_print(config.data)
  }
  return config
})

// 拦截器（响应拦截）
axiosInstance.interceptors.response.use((res) => {

  yb_print('================= responce ==================')
  yb_print(res.data)
  // 将数据提前一个位置，便于获取
  const response = {
    data: res.data.data,
    code: res.data.code,
    msg: res.data.msg,
    lastValue :res.data.lastValue ,
    hasMore : res.data.hasMore
    //status: res.data.status,
    //request: res.data.request,
    //page: {
    //  pageNum: res.data.pageNum || 0,
    //  pageSize: res.data.pageSize || 0,
    //  isLoaded: true
    //  //isLoaded: res.data.isLoaded ? true :false
    //}
  }
  Object(res)
  return res.data
})

export const uploadCos =  axiosInstance2.get

// 注册自定义GET请求(不需要的传token, 自动生成token)
export const get = function (url, params = {}, isShowFullLoading) {
  //const authorization = UserModel.getSendToken()
  return new Promise((resolve, reject) => {
    //isShowFullLoading && Vue.prototype.$loading({
    //  duration: 500
    //})
    Object.assign(params)
    const authorization =  'Bearer ' + (localStorage.getItem('token') || '')
    axiosInstance.get(url, {
      // 请求参数
      params: params,
      // 请求头
      headers: {
        'Authorization': authorization
      },
    }).then((res) => {
      // 成功回调

      if (successCode.has(res.code)) {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    }).catch((err) => {
      console.log(err)
      // 状态不是200
      reject(err.response ? err.response.data : ErrorMessage.timeOut)
    })
  })
}


// 注册自定义deleter请求(不需要的传token, 自动生成token)
export const deleter = function (url, params = {}) {
  //const authorization = UserModel.getSendToken()
  const authorization =  'Bearer ' + (localStorage.getItem('token') || '')
  return new Promise((resolve, reject) => {
    axiosInstance.delete(url, params, {
      // 请求头
      headers: {
        'Content-Type': 'application/json',
        'Authorization': authorization
      },
    }).then((res) => {
      // 成功回调
      if (successCode.has(res.code)) {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    }).catch((err) => {
      // 状态不是200
      reject(err.response ? err.response.data : ErrorMessage.timeOut)
    })
  })
}

// 注册自定义POST请求(不需要的传token, 自动生成token)
export const post = function (url, params = {}, isShowFullLoading) {
  //const authorization = UserModel.getSendToken()
  //isShowFullLoading && Vue.prototype.$loading()

  return new Promise((resolve, reject) => {
    Object.assign(params)
    const authorization =  'Bearer ' + (localStorage.getItem('token') || '')
    axiosInstance.post(url, params, {
      headers: {
        'Authorization': authorization
      },
    }).then((res) => {
      //Vue.prototype.$loadingClose()
      // 成功回调
      if (successCode.has(res.code)) {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    }).catch((err) => {
      //Vue.prototype.$loadingClose()
      // 状态不是200
      reject(err.response ? err.response.data : ErrorMessage.timeOut)
    })
  })
}

// ======================== 创建网络隔离框架 GET POST请求 =============================


// 注册自定义PATCH请求(不需要的传token, 自动生成token)
export const patch = function (url, params = {}) {
  //const authorization = UserModel.getSendToken()
  const authorization =  'Bearer ' + (localStorage.getItem('token') || '')
  return new Promise((resolve, reject) => {
    axiosInstance.patch(url, params, {
      headers: {
        'Authorization': authorization
      },
    }).then((res) => {
      // 成功回调
      if (successCode.has(res.code)) {
        // 已经处理过状态，所以不用管状态，直接返回数据
        resolve(res)
      } else {
        // 服务状态出现问题
        reject(res)
      }
    }).catch((err) => {
      // 状态不是200
      reject(err.response ? err.response.data : ErrorMessage.timeOut)
    })
  })
}

// 注册自定义PUT请求(不需要的传token, 自动生成token)
/**
 *
 * @param {*请求地址} url
 * @param {*} {id,params } 以对象方式传入
 */
export const put = function (url, {
  id,
  params = {}
  }) {
  const authorization =  'Bearer ' + (localStorage.getItem('token') || '')
  return new Promise((resolve, reject) => {
    let rurl = url
    if (id != undefined && id != '') {
      rurl = url + '/' + id
    }
    axiosInstance.put(rurl, params, {
      headers: {
        'Authorization': authorization
      },
    }).then((res) => {
        // 成功回调
        if (successCode.has(res.code)) {
          // 已经处理过状态，所以不用管状态，直接返回数据
          resolve(res)
        } else {
          // 服务状态出现问题
          reject(res)
        }
      })
      .catch((err) => {
        // 状态不是200
        reject(err.response ? err.response.data : ErrorMessage.timeOut)
      })
  })
}


// ======================== 注册 axios 原生 GET POST请求 =============================
// 注册 axios GET POST请求(可以直接使用axios请求)
Vue.prototype.$post = post
Vue.prototype.$get = get
Vue.prototype.$patch = patch
